home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Day Cry
/
Day Cry CD.bin
/
oh_towns
/
taropyon
/
he386
/
ccisrc
/
tg300mp.c
< prev
next >
Wrap
Text File
|
1994-09-20
|
18KB
|
629 lines
/*************************************************************************
* TG300 MULTI PART
*************************************************************************/
int Tg300partAdrOfs[16] =
{
0x100,0x200,0x300,0x400,0x500,0x600,0x700,0x800,0x900,0x000,0xA00,0xB00,0xC00,0xD00,0xE00,0xF00
};
int tg300_getPart( char *s )
{
int part;
part = atoi(s) - 1;
if ( part < 0 || part > 15 )
return (-1);
return (part);
}
/*************************************************************************
* ELEMENT RESERVE
*-------------------------------------------------------------------------
* exTG300_elementReserve(part,n)
* part üc 1 ü` 16
*************************************************************************/
int exTG300_elementReserve( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int part, v;
if ( argc != 2 )
{
_ERR: MM_setErrMsg(sqr,"TG300 \"ELEMENT RESERVE\" error!");
return(ERR);
}
if ( (part = tg300_getPart(argv[0])) < 0 )
goto _ERR;
v = atoi(argv[1]);
if ( v < 0 || v > 32 )
goto _ERR;
dat[0] = v;
return tg300_genMML( sqr, bufSiz, buf, 0x020000+Tg300partAdrOfs[part], 1, dat );
}
/*************************************************************************
* BANK SELECT
*-------------------------------------------------------------------------
* exTG300_bank(part,msb,lsb)
* part üc 1 ü` 16
*************************************************************************/
int exTG300_bank( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int part, msb, lsb;
if ( argc != 3 )
{
_ERR: MM_setErrMsg(sqr,"TG300 \"BANK SELECT\" error!");
return(ERR);
}
if ( (part = tg300_getPart(argv[0])) < 0 )
goto _ERR;
msb = atoi(argv[1]); if ( msb < 0 || msb > 0x7F ) goto _ERR;
lsb = atoi(argv[2]); if ( lsb < 0 || lsb > 0x7F ) goto _ERR;
dat[0] = msb;
dat[1] = lsb;
return tg300_genMML( sqr, bufSiz, buf, 0x020001+Tg300partAdrOfs[part], 2, dat );
}
/*************************************************************************
* PROGRAM NUMBER
*-------------------------------------------------------------------------
* exTG300_programNo(part,prog)
* part üc 1 ü` 16
* prog üc 1ü`128
*************************************************************************/
int exTG300_programNo( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int part, v;
if ( argc != 2 )
{
_ERR: MM_setErrMsg(sqr,"TG300 \"PROGRAM NUMBER\" error!");
return(ERR);
}
if ( (part = tg300_getPart(argv[0])) < 0 )
goto _ERR;
v = atoi(argv[1]) - 1;
if ( v < 0 || v > 127 )
goto _ERR;
dat[0] = v;
return tg300_genMML( sqr, bufSiz, buf, 0x020003+Tg300partAdrOfs[part], 2, dat );
}
/*************************************************************************
* Rcv CHANNEL
*-------------------------------------------------------------------------
* exTG300_rcvChannel(part,ch)
* part üc 1 ü` 16
* ch üc 0ü`16
*************************************************************************/
int exTG300_rcvChannel( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int part, v;
if ( argc != 2 )
{
_ERR: MM_setErrMsg(sqr,"TG300 \"Rcv CHANNEL\" error!");
return(ERR);
}
if ( (part = tg300_getPart(argv[0])) < 0 )
goto _ERR;
v = atoi(argv[1]);
if ( v == 0 )
v = 0x10; /* OFF */
else
--v;
if ( v < 0 || v > 16 )
goto _ERR;
dat[0] = v;
return tg300_genMML( sqr, bufSiz, buf, 0x020004+Tg300partAdrOfs[part], 1, dat );
}
/*************************************************************************
* MONO/POLY MODE
*-------------------------------------------------------------------------
* exTG300_monoPolyMode(part,mode)
* part üc 1 ü` 16
* mode üc 0:MONO
* 1:POLY
*************************************************************************/
int exTG300_monoPolyMode( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int part, v;
if ( argc != 2 )
{
_ERR: MM_setErrMsg(sqr,"TG300 \"MONO/POLY MODE\" error!");
return(ERR);
}
if ( (part = tg300_getPart(argv[0])) < 0 )
goto _ERR;
v = atoi(argv[1]);
if ( v < 0 || v > 1 )
goto _ERR;
dat[0] = v;
return tg300_genMML( sqr, bufSiz, buf, 0x020015+Tg300partAdrOfs[part], 1, dat );
}
/*************************************************************************
* SAME NOTE NUMBER KEY ON ASSIGN
*-------------------------------------------------------------------------
* exTG300_keyAssign(part,mode)
* part üc 1 ü` 16
* mode üc 0:SINGLE
* 1:MULTI
* 2:INST
*************************************************************************/
int exTG300_keyAssign( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int part, v;
if ( argc != 2 )
{
_ERR: MM_setErrMsg(sqr,"TG300 \"SAME NOTE NUMBER KEY ON ASSIGN\" error!");
return(ERR);
}
if ( (part = tg300_getPart(argv[0])) < 0 )
goto _ERR;
v = atoi(argv[1]);
if ( v < 0 || v > 2 )
goto _ERR;
dat[0] = v;
return tg300_genMML( sqr, bufSiz, buf, 0x020016+Tg300partAdrOfs[part], 1, dat );
}
/*************************************************************************
* PART MODE
*-------------------------------------------------------------------------
* exTG300_partMode(part,mode)
* part üc 1 ü` 16
* mode üc 0:NORMAL
* 1:DRUM
*************************************************************************/
int exTG300_partMode( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int part, v;
if ( argc != 2 )
{
_ERR: MM_setErrMsg(sqr,"TG300 \"PART MODE\" error!");
return(ERR);
}
if ( (part = tg300_getPart(argv[0])) < 0 )
goto _ERR;
v = atoi(argv[1]);
if ( v < 0 || v > 1 )
goto _ERR;
dat[0] = v;
return tg300_genMML( sqr, bufSiz, buf, 0x020017+Tg300partAdrOfs[part], 1, dat );
}
/*************************************************************************
* NOTE SHIFT
*-------------------------------------------------------------------------
* exTG300_noteShift(part,shift)
* part üc 1 ü` 16
* shift üc -24ü`+24
*************************************************************************/
int exTG300_noteShift( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int part, v;
if ( argc != 2 )
{
_ERR: MM_setErrMsg(sqr,"TG300 \"NOTE SHIFT\" error!");
return(ERR);
}
if ( (part = tg300_getPart(argv[0])) < 0 )
goto _ERR;
v = atoi(argv[1]) + 0x40;
if ( v < 0x28 || v > 0x58 )
goto _ERR;
dat[0] = v;
return tg300_genMML( sqr, bufSiz, buf, 0x020018+Tg300partAdrOfs[part], 1, dat );
}
/*************************************************************************
* DETUNE
*-------------------------------------------------------------------------
* exTG300_detune(part,shift)
* part üc 1 ü` 16
* shift üc -128ü`+127
*************************************************************************/
int exTG300_detune( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int part, v;
if ( argc != 2 )
{
_ERR: MM_setErrMsg(sqr,"TG300 \"DETUNE\" error!");
return(ERR);
}
if ( (part = tg300_getPart(argv[0])) < 0 )
goto _ERR;
v = atoi(argv[1]) + 0x80;
if ( v < 0x00 || v > 0xFF )
goto _ERR;
dat[0] = (v >> 4) & 0x0F;
dat[1] = v & 0x0F;
return tg300_genMML( sqr, bufSiz, buf, 0x020019+Tg300partAdrOfs[part], 2, dat );
}
/*************************************************************************
* VOLUME
*-------------------------------------------------------------------------
* exTG300_volume(part,vol)
* part üc 1 ü` 16
* vol üc 0 ü`127
*************************************************************************/
int exTG300_volume( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int part, v;
if ( argc != 2 )
{
_ERR: MM_setErrMsg(sqr,"TG300 \"VOLUME\" error!");
return(ERR);
}
if ( (part = tg300_getPart(argv[0])) < 0 )
goto _ERR;
v = atoi(argv[1]);
if ( v < 0 || v > 0x7F )
got